Google Protobuf oneof使用 您所在的位置:网站首页 one of例子 Google Protobuf oneof使用

Google Protobuf oneof使用

2024-07-07 09:13| 来源: 网络整理| 查看: 265

一、编写proto协议

当我们某一个字段可能出现多种不同类型,那么就可以使用oneof。对于网络传输中的一个响应,可能出现不同的结构。例如,response可能是文章列表(包含标题,正文,作者,日期等字段)、也有可能是一首歌(歌曲的byte,标题,作者信息等)。我们可以设计如下proto,使用protoc --cpp_out=. response.proto生成c++源代码,接下来写测试代码。

// response.proto syntax="proto3"; message Response { Header header = 1; oneof payload { ArticleResponse articleResponse = 2; MusicResponse musicResponse = 3; } } message Header { string namespace = 1; string name = 2; string version = 3; } message ArticleResponse { string title = 1; string author = 2; string date = 3; } message MusicResponse { string title = 1; string author = 2; bytes data = 3; }

二、测试代码

代码中,我尝试实现同时写入ArticleResponse和MusicResponse。使用g++ *.cc -o main -lprotobuf -std=c++11编译,可以看到结果只有article的返回有结果。

#include "response.pb.h" #include using namespace std; int main() { Response response; Header *h = new Header; h->set_namespace_("tensirfly.com"); h->set_name("music"); h->set_version("v1.0"); MusicResponse* mr = new MusicResponse; mr->set_author("zjl"); mr->set_data("123"); mr->set_title("半岛铁盒"); ArticleResponse* ar = new ArticleResponse; ar->set_author("my"); ar->set_date("2021年10月12日"); ar->set_title("红高粱家族"); response.set_allocated_header(h); response.set_allocated_musicresponse(mr); response.set_allocated_articleresponse(ar); string str; response.SerializePartialToString(&str); cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有